前天有學長提到可以使用 regex 做電子信箱的「系所」與「學校」驗證,而我研究了一下,發現規則運算式比我之前短了許多,且不會遇到@csie.ntnu.edu.tw
就無法驗證,也難以方便套用在其他學校的電子信箱。因此,今天補充介紹 如何透過 regex 做電子信箱的驗證。
regex 是 regular expression(正規表示式)的簡稱,可以透過一個表示式字串來找到符合該規則的所有字串。
這次使用了兩個網站,分別是 regex101 和 freeformatter。
語法查詢,可以在一頁中看到常用的語法,以及他的介紹。這補足 regex101 語法查詢太多,還要點進去才看得到如何使用的問題。
給一個 regex ,這個網站可以解釋這個 regex 每一步在判斷甚麼(EXPLANATION)(圖一),以及可輸入測試字串(TEST STRING)(圖二)測試是否符合預期。
在這裡附上電子信箱驗證的 regex: (\d{3}47\d{3}s)(@.*ntnu\.edu\.tw)
,大家可以進入 regex101 丟這串進去,就可以在右邊看到每個部份在做什麼事了,所以這邊不細講。
圖一: (\d{3}47\d{3}s)(@.*ntnu\.edu\.tw)
的 EXPLANATION
圖二: 測試字串,如果符合會有顏色標亮效果
如果和原本的公式合起來會從=AND(EQ(J4,Q4), AND(EQ(MID(I4,4,2),"47"),OR(EQ(MID(I4,FIND("@",I4)+1,4),"ntnu"),EQ(MID(I4,FIND("@",I4)+7,4),"ntnu"))))
變成=AND(EQ(J4,Q4),REGEXMATCH(I4,"(\d{3}47\d{3}s)(@.*ntnu\.edu\.tw)"))
看起來簡潔好懂多了!
這邊建議程設助教可以出一下 regex